#!/bin/sh
#
# Copyright (C) 2012 Karel Zak <kzak@redhat.com>
#
# Usage: ko-release-gen [<directory> [<file>]]
#
# This script prepares a new release for publishing on kernel.org. The
# hierarchy of release files is created in the <directory> (default directory
# is "kernel.org"). Use case:
#
#  make distcheck
#  make changelog
#  tools/ko-release-gen
#  tools/ko-release-push
#

cd "$(git rev-parse --show-toplevel)" || {
  echo "error: failed to chdir to git root"
  exit 1
}

[ -f ".version" ] || \
	echo "error: cannot found version file (call make distcheck)"

VERSION=$(cat .version)
VERSION_MAJOR=$(echo $VERSION | sed 's/-rc[0-9]//; s/\(.*\..*\)\..*/\1/')
VERSION_DOCS=$(echo $VERSION | sed 's/-rc[0-9]//')
DISTDIR=${1:-"kernel.org"}/v${VERSION_MAJOR}

GPG_PROG=${GPG_PROG:-"gpg"}
GPG_CMD="$GPG_PROG --use-agent --armor --detach-sign --quiet"

die() {
	echo $1
	exit 1
}

add_file() {
	local src="$1"
	local name=$(basename $1)
	local subdir=$DISTDIR/${2:-""}

	mkdir -p $subdir
	cp $src $subdir || die "$src: copy failed"

	[ -f $subdir/$name ] || die "$name not found"
	echo -n " $subdir/$name ..."

	case "$name" in
	*.tar.xz)
		local sig=$(echo "$name" | sed 's/\.tar\.xz/.tar.sign/')
		xz -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig
		;;
	*.tar.gz)
		local sig=$(echo "$name" | sed 's/\.tar\.gz/.tar.sign/')
		gzip -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig
		;;
	*.tar.bz2)
		local sig=$(echo "$name" | sed 's/\.tar\.bz2/.tar.sign/')
		bzip2 -d -c $subdir/$name | $GPG_CMD --output $subdir/$sig
		;;
	*)
		local sig="${name}.sign"
		cat $subdir/$name | $GPG_CMD --output $subdir/$sig
		;;
	esac
	echo " OK "
}

add_html_dir() {
	local src="$1"		# source dir
	local tgt="$2"		# target dir

	for fl in $(ls $src/*.html $src/*.css $src/*.png); do
		add_file $fl $tgt
	done
}

rm -rf $DISTDIR

eval $(gpg-agent --daemon)

# Add just specified files only
if [ -f "$2" ]; then
	shift
	while (( "$#" )); do
		add_file "$1"
		shift
	done
	killall gpg-agent
	exit 0
fi

add_file	util-linux-${VERSION}.tar.xz
add_file	v${VERSION}-ChangeLog
add_file	Documentation/releases/v${VERSION_DOCS}-ReleaseNotes
add_html_dir	libmount/docs/html libmount-docs
add_html_dir	libblkid/docs/html libblkid-docs
add_html_dir	libsmartcols/docs/html libsmartcols-docs
add_html_dir	libfdisk/docs/html libfdisk-docs

killall gpg-agent

